package com.hoyo.service;

import java.util.List;
import java.util.Set;

import com.hoyo.common.VerifyCode;
import com.hoyo.domain.Catalog;
import com.hoyo.domain.User;
import com.hoyo.domain.UserInfo;

public interface UserService {
	
	/**
	 * 根据账号Account查询当前用户
	 * @param account
	 * @return
	 */
	User findByIdentifier(String identifier) throws Exception;
	
	/**	
	 * 获取资源集合
	 * @param account
	 * @return
	 */
	Set<String> findPermissions(String account) throws Exception;
	
	/**
	 * 获取URL权限
	 * @param account
	 * @return
	 */
	List<String> findPermissionUrl(String account) throws Exception;
	
	/**
	 * 注册
	 * @param user 顾客信息
	 * @throws Exception
	 */
	void register(UserInfo user) throws Exception;
	
	/**
	 * 修改密码
	 * @param password 新密码
	 * @throws Exception
	 */
	void modifyPassword(String username, String password) throws Exception;
	
	/**
	 * 检测邮箱地址是否已被使用
	 * @param email 邮箱地址
	 * @throws EmailUsedException
	 */
	boolean emailRepeatCheck(String email)throws Exception;

	/**
	 * 检测手机号码是否已被使用
	 * @param telephone 手机号码
	 * @throws TelephoneUsedException
	 */
	boolean telephoneRepeatCheck(String telephone)throws Exception;
	
	/**
	 * 修改昵称
	 * @param nickname 新的昵称
	 */
	void modifyNickname(String username, String nickname) throws Exception;
	
	/**
	 * 修改头像
	 * @param nickname 新的头像
	 */
	void modifyIconInfo(String username, String iconUrl) throws Exception;
	
	/**
	 * 用户发送邮箱验证码
	 * @param username ： 用户名
	 */
	VerifyCode sendEmailCode(String username) throws Exception;
	
	/**
	 * 解绑邮箱地址
	 * @param username ： 用户名
	 */
	void unbindEmail(String username) throws Exception;
	
	/**
	 * 绑定邮箱地址
	 * @param email 新的邮箱地址
	 */
	void bindEmail(String username, String email) throws Exception;
	
	/**
	 * 用户发送手机验证码
	 * @param username ： 用户名
	 */
	VerifyCode sendTelephoneCode(String username) throws Exception;
	
	/**
	 * 解绑手机号码
	 * @param username ： 用户名
	 */
	void unbindTelephone(String username) throws Exception;
	
	/**
	 * 绑定手机号码
	 * @param username：用户名
	 * @param telephone：新的手机号码
	 */
	void bindTelephone(String username, String telephone) throws Exception;
	
	UserInfo lookup(String username) throws Exception;
	
	UserInfo findUserInfoByUserId(int userid);
	
	
	/**
	 * 修改个人信息
	 * @param userInfo：个人信息
	 */
	void updatePersonInfo(UserInfo userInfo) throws Exception;
}
